package game.view;

//package com.chy.myGame.view;

import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

import game.controller.Listener;
import game.model.Board;

/**
 * 主窗口，并且负责监听并处理用户输入
 *
 * @author 陈渤林
 */
public class GameView extends JFrame {
//	private static int score = 0;


    /**
     * 事件监听者
     */
    private Listener listener = null;

    /**
     * 界面信息组件：标题
     */
    private JLabel title = null;
    /**
     * 界面信息组件：提示
     */
    private JLabel tips = null;

    /**
     * 棋盘观察者
     */
    private BoardView boardView = null;

    /**
     * 构造函数，需要传入对应棋盘、用户交互的监听器
     *
     * @param board    对应棋盘
     * @param listener 用户交互的监听器
     */
    public GameView(Board board, Listener listener) {
        super("2048小游戏");
        /*
        JFrame.EXIT_ON_CLOSE：关闭窗口时终止应用程序。
        JFrame.DISPOSE_ON_CLOSE：默认行为，仅关闭窗口。
        JFrame.DO_NOTHING_ON_CLOSE：关闭窗口时不执行任何操作。
        JFrame.HIDE_ON_CLOSE：关闭窗口时隐藏窗口，但不终止应用程序。
         */
        super.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        super.setResizable(false); // 窗口是可调大小的
        super.setLayout(null); // 不使用布局管理器

        // 初始化监听者
        this.listener = listener;
        super.addKeyListener(this.listener); // 注册监听者

        // 初始化标题
        this.title = new JLabel("2048", JLabel.CENTER);
        this.title.setFont(BasicParameters.topicFont);
        this.title.setForeground(Color.BLACK);
        this.title.setBounds(0, 0, 150, 60);
        super.add(this.title);

        // 初始化说明
        this.tips = new JLabel("操作: ↑ ↓ ← →, 按esc键退出  ", JLabel.CENTER);
        this.tips.setFont(BasicParameters.normalFont);
        this.tips.setForeground(Color.DARK_GRAY);
        this.tips.setBounds(0, 60, 400, 40);
        super.add(this.tips);

        // 棋盘、窗口大小
        this.changeObservation(board);


        // 分数区
//		JLabel jlblScoreName = new JLabel("得 分", JLabel.CENTER);
//		jlblScoreName.setFont(BasicParameters.scoreFont);
//		jlblScoreName.setForeground(Color.WHITE);
//		jlblScoreName.setOpaque(true);
//		jlblScoreName.setBackground(Color.GRAY);
//		jlblScoreName.setBounds(250, 0, 120, 30);
//		super.add(jlblScoreName);

        // 得分
//		JLabel jlabelScore = new JLabel("0", JLabel.CENTER);
//		jlabelScore.setFont(BasicParameters.scoreFont);
//		jlabelScore.setForeground(Color.WHITE);
//		jlabelScore.setOpaque(true);
//		jlabelScore.setBackground(Color.GRAY);
//		jlabelScore.setBounds(250, 30, 120, 30);
//		super.add(jlabelScore);
    }

    public void changeObservation(Board board) {
//		super.removeAll();
//		super.remove();
        // 窗口大小
        int jframeWidth = board.getWidth() * 100 + 10;
        int jframeHeight = board.getHeight() * 100 + 130;
        super.setSize(jframeWidth, jframeHeight);

        // 棋盘
        if (this.boardView != null) super.remove(this.boardView);
        this.boardView = new BoardView(board);
        this.boardView.setBounds(0, 100, board.getWidth() * 100, board.getHeight() * 100);
        this.boardView.setBackground(Color.GRAY);
        this.boardView.setLayout(new FlowLayout());
        super.add(this.boardView);
//        this.boardView.setFocusable(true); // 是可聚焦的
//        this.boardView.addKeyListener(this.listener); // 注册监听者
//		  this.boardView.requestFocusInWindow(); // 获得焦点

        super.setLocationRelativeTo(null); // 在屏幕居中处显示窗口，这一步在 setSize 之后做即可
        super.setVisible(true); // 显示界面
    }

    public void update() {
        this.boardView.repaint();
    }

}
